Элементы
управления
1. Рамка (Frame)
Рамка объединяет в себе разнотипные элементы управления. В этом рамка
похожа на коллекцию. Но у рамок несколько иное назначение, чем у коллекций.
Поместите на форму элемент управления Frame, придав
ему довольно большие размеры. Затем возьмите из Toolbox и поместите внутрь этой рамки несколько других элементов управления, в
том числе еще один Frame. А теперь передвиньте
рамку по форме. Вы видите, что объекты внутри рамки передвинулись вместе с
ней. Посмотрите на значения свойств Тор и Left любого объекта внутри рамки. Теперь это координаты не относительно
формы, а относительно рамки.
Если вы захотите мышкой переместить в рамку уже размещенный на форме
объект, у вас ничего не получится. Оказавшись внутри границ рамки, он не стал
"своим". Убедитесь в этом, сдвинув рамку в сторону. Все уехали,
объект остался на месте. Чтобы добиться желаемого, вырежьте (Cut) объект
со старого места и наклейте (Paste) в рамку. Аналогичная ситуация, когда вы попытаетесь обнять новой или
старой рамкой уже существующие объекты
Рамка является удобным средством объединения элементов управления по
смыслу .
В программе вы можете изменять значения свойств рамки Top, Left. Объекты, объединенные в рамке, будут при этом перемещаться вместе с
ней. Вы можете изменять значения свойств рамки Visible, Enabled. При этом
точно так же будут меняться значения этих свойств всех объектов, объединенных
в рамке. Это полезно тогда, когда у вас на форме слишком много объектов и все
они свободно не умещаются на ней. Вас может выручить то, что не все они нужны
одновременно. Разделите их между наложенными друг на друга рамками и в каждый
момент времени делайте видимой только одну из них.
Поэкспериментируйте с цветами, границей, шрифтом рамки. Способностями,
аналогичными способностям рамки, обладает и объект PictureBox. Проверьте
- в нем точно так же можно размещать элементы управления. Мы знаем и еще один
такой объект. Это, конечно же, сама форма. Все подобные объекты называются
контейнерами.
Вот некоторые элементы управления, с которыми мы уже познакомились:
•
кнопка, метка, текстовое поле;
•
Animation ;
•
Image, Picture ;
•
Line, Shape ;
•
таймер;
•
рамка (Frame) ;
Многих из
описываемых элементов управления нет на Toolbox. Чтобы их добыть, поставьте флажки в Project->Components->
Microsoft Windows Common Controls 6.0 и Microsoft
Windows Common Controls 6.0-2.
Флажок (CheckBox)
Поместите на форму несколько флажков
(CheckBox). Запустите проект. Пощелкайте внутри квадратиков. Флажок мы устанавливаем
(ставим галочку мышкой или с клавиатуры) тогда, когда хотим сказать
"да", а снимаем установку (снимаем галочку мышкой или с клавиатуры),
когда хотим сказать "нет".
Приме: Нажатием на кнопку нужно нарисовать
окружность. Но перед нажатием кнопки мы должны иметь возможность одним флажком
установить или не установить тройную толщину линии этой окружности, а другим
флажком установить или не установить синий цвет этой линии Если флажки мы не
установим, то толщина и цвет будут выполнены по умолчанию (одинарная и черный).
Ваши действия. Создайте проект с кнопкой и двумя флажками
Имена флажков - Check1 и
Check2.
Программа:
Private Sub Command1_Click()
Cls
If Check1.Value = vbChecked Then
DrawWidth = 3
Else
DrawWidth = 1
'Если флажок 1 установлен, mo толщина тройная, иначе -
одинарная
End If
If Check2.Value = vbChecked Then
ForeColor = vbBlue
Else
ForeColor = vbBlack 'Если флажок 2 установлен, то цвет синий, иначе -
черный
End If
Circle (500, 500), 300
End Sub
Пояснение. У многих элементов управления есть свойство Value (значение), характеризующее главное
назначение элемента. Свойство Value флажка имеет 3 значения: vbChecked (установлен, галочка), vbUnchecked (не установлен, пустой белый квадрат) и vbGrayed (галочка
на сером фоне - используется нечасто, например в программе установки Microsoft Office). Все 3 значения можно устанавливать в режиме проектирования
и программным способом. В режиме работы можно вручную, мышкой или с клавиатуры
устанавливать только первые 2 значения, причем переключать между этими двумя
значениями можно сколько угодно раз. В этом и состоит удобство флажков: перед
тем как совершить решающее нажатие на кнопку, можно как угодно устанавливать
флажки или, передумав, снимать установку.
Переключатель
(OptionButton)
Поместите на форму 3 элемента управления OptionButton. Запустите проект. Пощелкайте
внутри кружочков. Вы видите, что изо всех переключателей в любой момент
времени только один может быть выбран, остальные автоматически отключаются.
Это полезное свойство удобно применять там, где нужно выбрать только одну из
нескольких возможностей.
А что делать, если вам на той же
форме нужно организовать еще одну группу переключателей? Для этого нужно каждую
группу поместить в свой контейнер, например в рамку (Frame).
В противном случае изо всех семи
переключателей в любой момент времени будет выбран только один.
Так же, как и у флажка, главным
свойством переключателя является Value. Только тип этого свойства логический - когда переключатель
выбран, оно равно True.
Компьютер
может узнать, выбран ли переключатель Option1, при помощи следующего оператора:
If Option1.Value = True Then...
Учитывая,
что тип свойства логический, можно сократить эту запись:
If Option1.Value Then ...
А можно и еще сократить. Visual Basic позволяет обращаться к главному свойству элемента
управления (в нашем случае это Value) сокращенно - вместо Option1.Value - просто Option1. Получается:
If Option1 Then...
Вот фрагмент, позволяющий узнать,
какой из переключателей группы выбран (имена переключателей: Option1, Option2,...):
If Option1 Then
Print "Выбран синий"
Elseif
Option2 Then
Print "Выбран зеленый"
End If
Если вам нужно, чтобы некоторое
действие было выполнено не потом, а сразу же после щелчка по переключателю, вы
можете для каждого переключателя написать процедуру обработки события Click, но гораздо удобнее объединить все переключатели группы в
массив, тогда процедуру придется писать только одну:
Private Sub Option1_Click(lndex As Integer)
Select Case Index
Case 0
Print "Выбран зеленый"
Case 1
Print "Выбран синий"
End Select
End Sub
Полосы прокрутки (HScrollBar и VScrollBar)
Для определенности поговорим о
горизонтальной полосе прокрутки (HscrollBar).
Все сказанное будет полностью относиться и к вертикальной полосе (VScrollBar).
Поместите на форму горизонтальную полосу. Запустите
проект. Потаскайте мышкой бегунок. Вы, безусловно, знакомы с полосой прокрутки
по другим приложениям Windows. Она используется в основном для того, чтобы прокручивать
информацию в окне или же просто менять значение какой-нибудь величины.
Пример. Изменять
с помощью полосы прокрутки значение переменной величины W в пределах от 20 до 50. При щелчке по стрелкам полосы или
клавиатуры значение переменной должно меняться на 2, а при щелчке по полосе
слева или справа от бегунка значение переменной должно меняться на 5. При
запуске проекта бегунок должен стоять на отметке 27.
Ваши действия. Создайте
проект и поместите на форму горизон-
тальную полосу прокрутки. Ее имя HScroll1.
Установите в соответствии
с числами из задания следующие свойства полосы:
Min - 20;
Мах - 50;
SmallChange-2;
LargeChange-5;
Value - 27.
Проверьте правильность работы полосы, запустив программу :
Private
Sub HScroll1_Change()
W = HScroll1.Value
Print W
End Sub
Событие HScroll1_Change возникает при любом перемещении бегунка.
Slider, ProgressBar
Slider. Его
действие и свойства (Min, Мах, SmallChange, LargeChange, Value) аналогичны действию и свойствам полосы прокрутки HScrollBar.
Вверху 2 варианта ProgressBar. Вы наверняка наблюдали один из них при инсталляции
программ. Зачем нужна ProgressBar? Пусть
ваша программа запускает длительный процесс, во время которого на экране ничего
не происходит (например, считывает информацию из 400 файлов). У пользователя
может возникнуть тревожное ощущение, что программа "зависла". Чтобы
этого ощущения не было, вы можете выдать на экран текст Я занята. Подождите
минутку, который пропадет, когда дело будет сделано. Но, пока дело делается,
этот текст так долго и неподвижно красуется посреди экрана, что в душу опять
закрадываются подозрения. Гораздо лучше создать ProgressBar, полоса которой после считывания информации из каждого
файла будет продвигаться на 1/400 часть длины ProgressBar. Поскольку компьютер работает быстро, у пользователя
создастся впечатление, что полоса плавно ползет направо. А раз движение есть,
значит, компьютер не "завис"! К тому же можно в процессе работы
примерно представлять, какая часть ее выполнена.
Свойства ProgressBar - Min, Max - аналогичны свойствам полосы прокрутки. Внешний вид
определяется свойством Scrolling.
Для иллюстрации сказанного создайте проект. Разместите
элементы управления, как на рисунке. Установите свойство Мах слайдера в 50, у
остальных - в 100. Запустите следующие процедуры:
Private
Sub Command1_Click()
For а = 0 То 40 Step 0.01
ProgressBar1 = а Next
End Sub
Private
Sub Command2_Click()
For a = 0 To 80 Step 0.1
ProgressBar2 = a
Next
End Sub
Private Sub Command3_Click()
For а = 0 То 30 Step 0.001
Sliderl = а
Next
End Sub
Во время выполнения процедур полосы и бегунок слайдера движутся.
Если движение слишком быстрое или слишком медленное, измените шаг цикла.
Список (ListBox) и поле со списком (ComboBox)
Список (ListBox)
Поместите на форму список. Его имя - Listl. Заполните список. Для этого зайдите в его свойство List и введите слово Зеленый - первый элемент списка, после
чего нажмите Ctrl-Enter. Теперь введите слово Красный - второй элемент списка ,
нажмите Ctrl-Enter. И так далее. Запустите проект. Пощелкайте по элементам
списка.
Если все элементы списка не умещаются в его видимом
пространстве, то у списка автоматически возникает полоса прокрутки.
Свойство Text списка
Listl - это значение выбранного элемента списка Listl.
ComboBox (вариант "Раскрывающийся список") ComboBox - это обогащенный новыми
возможностями ListBox. Он существует в трех вариантах. Рассмотрим их по мере
усложнения.
Поместите на форму ComboBox. Его имя - Combol. Вариант ComboBox определяется значением его свойства Style. Выберите вариант Dropdown List - Раскрывающийся список. Заполните ComboBox так же,
как вы заполняли список ListBox. Запустите проект.
Щелкните по черной треугольной стрелке в правой части
списка. Список раскроется, и вы сможете выбрать из него любой элемент так же,
как вы выбирали элементы из списка ListBox. Программа для ComboBox также будет совершенно аналогична программе для ListBox.
ComboBox (вариант "Простой Combo")
Поместите на форму ComboBox (а проще - скопируйте старый). В его свойстве Style выберите вариант Simple Combo - Простой Combo. Заполните ComboBox так же, как вы заполняли список ListBox. Запустите проект.
Отличие ComboBox от ListBox в том, что сверху от списка имеется текстовое поле.
Зачем же нужно текстовое поле? А затем, что если вам вдруг
понадобится распечатать команду, которой нет в списке, вы всегда можете ввести
ее в текстовое поле и нажать кнопку печати.
Раскрывающийся список тоже имеет наверху текстовое поле,
только вводить туда ничего нельзя.
ComboBox (вариант "Раскрывающийся Combo")
Раскрывающийся Combo объединяет в себе преимущества двух других вариантов ComboBox: он выглядит так же компактно, как Раскрывающийся список, и
позволяет редактировать текстовое поле, как Простой Combo.
Свойства,
события и методы элементов управления ListBox и ComboBox
Все примеры, приведенные здесь относительно ListBox, относятся также и к любому варианту ComboBox. Элементы списков нумеруются с нуля!
Оператор |
Смысл
|
List1.Additem "зеленый" |
В конец
списка List1 метод Additem добавляет
элемент зеленый |
List1.Additem "фиолетовый", 3 |
Метод Additem добавляет элемент фиолетовый на место №
3 в список List1 |
List1.Removeitem
4 |
Метод Removeitem удаляет
элемент № 4 из списка List1 |
List1.Clear |
Опустошить список List1 |
Print List1.Text |
Напечатать значение выбранного элемента в списке List1 |
Print Combo1.Text |
Напечатать значение текстового поля из ComboBox |
Print List1.List(5) |
Напечатать значение элемента № 5 в списке List1 |
List1.List(0)= "Красный" |
Присвоить элементу № 0 в списке List1 значение
Красный |
Print List1.listindex
|
Напечатать номер выбранного элемента в списке List1. Если
элемент не выбран, то печатается -1 |
Print List1.ListCount |
Напечатать количество элементов в списке List1 |
Если вы хотите, чтобы элементы списка были отсортированы
по алфавиту, то в режиме проектирования установите в True свойство Sorted. В
режиме работы его менять нельзя. Сортировка нарушится, если вы будете
использовать метод Additem с индексом. Не забывайте, что сортировка текстовая, а не
числовая, поэтому 28 будет стоять выше пяти.
У ListBox есть некоторые преимущества перед ComboBox: он может состоять из нескольких столбцов и допускает множественный
выбор. Но на этом мы останавливаться не будем.
Щелчок или двойной щелчок по элементу списка вызывают, как
водится, события Click и DblClick
Элементы MonthView
и DTPicker
Оба они похожи друг на друга, поэтому остановлюсь только
на DTPicker. Его вид после запуска проекта с такой процедурой в окне
кода:
Private
Sub DTPicker1_Change()
If DTPickerl = #4/24/2001# Then
MsgBox "День рождения"
End Sub
и щелчка мышкой по 24 апреля 2001 г.
DTPicker1 воспринимает любые даты с 1601-го по 9999 г.
Этими элементами удобно пользоваться для ручного
заполнения датами списков и баз данных.
UpDown
Разместите на форме элемент управления UpDown. Он имеет вид двух кнопок со стрелками. Рядом с ним
разместите текстовое поле или другой элемент управления, способный показывать
числа. Мы разместили текстовое поле Text1 (рис. 15.10).